﻿#include "common.h"
#include "QtMyThread.h"

VarPos var_listener_coord;

ListenerCoordThread::ListenerCoordThread(QObject* parent)
    : QThread(parent)
    , sleep_time(10000)
    , m_isRunning(false)
    , coord_window(nullptr)
    , my_player(nullptr)
{
}

ListenerCoordThread::ListenerCoordThread(QObject* parent,
    CoordWindow* coord, MusicPlayer* player)
    : QThread(parent)
    , sleep_time(10000)
    , m_isRunning(false)
    , coord_window(coord)
    , my_player(player)
{
}

ListenerCoordThread::~ListenerCoordThread()
{
    stopThread();
    wait(); // 等待线程结束
}

void ListenerCoordThread::startThread(unsigned int time)
{
    this->sleep_time = time;
    if (m_isRunning)
        return;
    m_isRunning = true;
    start();
}

void ListenerCoordThread::stopThread()
{
    m_isRunning = false;
}

void ListenerCoordThread::run()
{
    //emit started();
    while (m_isRunning) {
        // 这里放置你想要在线程中运行的代码块
        //qDebug() << "线程正在运行...";
        // 模拟工作，实际应用中这可能是你的核心逻辑代码

        /*if (!var_listener_coord.flag_x ||
        !var_listener_coord.flag_y ||
        !var_listener_coord.flag_z)
        return;*/

        //begin:
        if (var_listener_coord.flag_x > 0)
            var_listener_coord.x += coord_window->getUi().spinBoxPosX->value();
        else if (var_listener_coord.flag_x < 0)
            var_listener_coord.x -= coord_window->getUi().spinBoxPosX->value();

        if (var_listener_coord.flag_y > 0)
            var_listener_coord.y += coord_window->getUi().spinBoxPosY->value();
        else if (var_listener_coord.flag_y < 0)
            var_listener_coord.y -= coord_window->getUi().spinBoxPosY->value();

        if (var_listener_coord.flag_z > 0)
            var_listener_coord.z += coord_window->getUi().spinBoxPosZ->value();
        else if (var_listener_coord.flag_z < 0)
            var_listener_coord.z -= coord_window->getUi().spinBoxPosZ->value();

        if (var_listener_coord.x > 1000 ||
            var_listener_coord.x < -1000) {
            var_listener_coord.flag_x = -var_listener_coord.flag_x;
            if (var_listener_coord.flag_x > 0)
                var_listener_coord.x += coord_window->getUi().spinBoxPosX->value();
            else if (var_listener_coord.flag_x < 0)
                var_listener_coord.x -= coord_window->getUi().spinBoxPosX->value();
            //goto begin;
        }
        if (var_listener_coord.y > 1000 ||
            var_listener_coord.y < -1000) {
            var_listener_coord.flag_y = -var_listener_coord.flag_y;
            if (var_listener_coord.flag_y > 0)
                var_listener_coord.y += coord_window->getUi().spinBoxPosY->value();
            else if (var_listener_coord.flag_y < 0)
                var_listener_coord.y -= coord_window->getUi().spinBoxPosY->value();
            //goto begin;
        }
        if (var_listener_coord.z > 1000 ||
            var_listener_coord.z < -1000) {
            var_listener_coord.flag_z = -var_listener_coord.flag_z;
            if (var_listener_coord.flag_z > 0)
                var_listener_coord.z += coord_window->getUi().spinBoxPosZ->value();
            else if (var_listener_coord.flag_z < 0)
                var_listener_coord.z -= coord_window->getUi().spinBoxPosZ->value();
            //goto begin;
        }
        /*qDebug() << "Listener coord: (" <<
            var_listener_coord.x << ", " <<
            var_listener_coord.y << ", " <<
            var_listener_coord.z << ")";*/
        my_player->set_listener_coordinate(var_listener_coord.x,
            var_listener_coord.y,
            var_listener_coord.z);

        QThread::msleep(sleep_time); // 每隔 sleep_time 毫秒执行一次
    }
    //emit finished();
}
